package com.coda.mapper;

import com.coda.annotation.AutoFill;
import com.coda.entity.Role;
import com.coda.enumeration.OperationType;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface RoleMapper {
    /**
     * 查询所有用户角色列表
     * @return
     */
    @Select("select * from role where role_state = 1")
    List<Role> getRoleList();

    /**
     * 根据id查询用户角色列表
     * @param id
     * @return
     */
    List<Role> getRoleListByUserId(Long id);

    /**
     * 根据用户id删除对应角色
     * @param userId
     */
    @Delete("delete from user_role where user_id = #{userId}")
    void deleteUserRoleByUserId(Long userId);

    /**
     * 添加用户对应的角色
     * @param roleId
     * @param userId
     */
    void addRoleUser(@Param("roleId") Long roleId,@Param("userId") Long userId);

    /**
     * 根据角色名查询角色信息
     * @param roleName
     * @return
     */
    @Select("select * from role where role_name = #{roleName}")
    Role getRoleByName(String roleName);

    /**
     * 批量删除用户对应的角色
     * @param ids
     */
    void deleteUserRoleLIst(@Param("ids") List<Long> ids);

    /**
     * 分页查询角色列表
     * @param role
     * @return
     */
    Page<Role> getRolePage(Role role);

    /**
     * 添加角色
     * @param role
     */
    @AutoFill(OperationType.INSERT)
    void addRole(Role role);

    /**
     * 根据id过去角色对应的用户数量
     * @param roleId
     * @return
     */
    int getRoleUserCount(Long roleId);

    /**
     * 更新角色
     * @param role
     */
    @AutoFill(OperationType.UPDATE)
    void update(Role role);

    /**
     * 根据id删除角色
     * @param id
     */
    @Delete("delete from role where role_id = #{id}")
    void deleteRoleById(Long id);

    /**
     * 根据id查询角色
     * @param id
     * @return
     */
    @Select("select * from role where role_id = #{id}")
    Role getRoleById(Long id);
}
